package com.xp.ai.chatmemory;

import dev.langchain4j.data.message.AiMessage;
import dev.langchain4j.data.message.CustomMessage;
import dev.langchain4j.data.message.UserMessage;
import dev.langchain4j.memory.ChatMemory;
import dev.langchain4j.memory.chat.MessageWindowChatMemory;
import dev.langchain4j.model.chat.ChatLanguageModel;
import dev.langchain4j.model.chat.request.ChatRequestParameters;
import dev.langchain4j.model.chat.response.ChatResponse;
import dev.langchain4j.model.openai.OpenAiChatModel;

import java.util.HashMap;

/**
 *
 * 电子闺蜜
 * openai 实现长文本 大模型 多轮对话
 */
public class OpenAiMemoryChat {
    public static void main(String[] args) {
        ChatLanguageModel model = OpenAiChatModel.builder()
                .apiKey("demo")
                .defaultRequestParameters(ChatRequestParameters.builder()
                        .modelName("gpt-4o-mini")
                        .temperature(0.7)
                        .build())
                .build();

//        ChatMemory chatMemory = MessageWindowChatMemory.withMaxMessages(10);

        // 这里选用的 MessageWindowChatMemory 是代表的是基于对话的条数的窗口，
        // 也就是说，如果窗口大小为 10，那么当对话长度超过10 的时候就有问题了
        // 这里存消息都是存在内存中的 因为langchat4j 有一个默认的实现
        // InMemoryChatMemoryStore 是存储在内存中 使用了一个 Map 来存储数据
        // 如果可以存储到数据库中，也可以存储到文件系统中，
        MessageWindowChatMemory chatMemory = MessageWindowChatMemory.builder()
                .maxMessages(10)
                .build();
        UserMessage userMessage1 = UserMessage.from("你是阿强，阿珍是你最好的闺蜜");
        chatMemory.add(userMessage1);
        //这里发送消息的时候就是chatMemory了 而不是直接发送的 userMessage1
        ChatResponse chat = model.chat(chatMemory.messages());
        AiMessage aiMessage = chat.aiMessage();
        System.out.println(aiMessage.text());
        chatMemory.add(aiMessage);

        UserMessage userMessage2 = UserMessage.from("你最好的闺蜜是谁？");
        //将最新的问题装载到chatmemory中
        chatMemory.add(userMessage2);
        //再执行最新一次询问的时候，这里发送的就是chatMemory了
        ChatResponse chat2 = model.chat(chatMemory.messages());
        System.out.println(chat2.aiMessage().text());


    }
}
